// 541. 反转字符串 II
// 给定一个字符串 s 和一个整数 k，从字符串开头算起，每计数至 2k 个字符，
// 就反转这 2k 字符中的前 k 个字符。

// 如果剩余字符少于 k 个，则将剩余字符全部反转。
// 如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。
// 输入：s = "abcdefg", k = 2
// 输出："bacdfeg"
// 思路：在遍历字符串的过程中，只要让 i += (2 * k)，i 每次移动 2 * k 就可以了，
// 然后判断是否需要有反转的区间。
/**
 * @param {string} s
 * @param {number} k
 * @return {string}
 */
 var reverseStr = function(s, k) {
    const len = s.length;
    let resArr = s.split(""); 
    for(let i = 0; i < len; i += 2 * k) {
        let l = i - 1, r = i + k > len ? len : i + k;//判断r的大小
        while(++l < --r) [resArr[l], resArr[r]] = [resArr[r], resArr[l]];
    }
    return resArr.join("");
};

// 345. 反转字符串中的元音字母
// 给你一个字符串 s ，仅反转字符串中的所有元音字母，并返回结果字符串。

// 元音字母包括 'a'、'e'、'i'、'o'、'u'，且可能以大小写两种形式出现。
// 输入：s = "hello"
// 输出："holle"
// 思路：先拆分字符串，然后判断是否存在，如果存在就交换
/**
 * @param {string} s
 * @return {string}
 */
 var reverseVowels = function(s) {
    let set=new Set(['a','e','i','o','u','A','E','I','O','U']);
    let res=s.split('');
    let i=0,j=res.length-1;
    while(i<j){
        if(set.has(res[i])){
            if(set.has(res[j])){
                [res[i],res[j]]=[res[j],res[i]];
                i++;
            }
            j--;  
        }
        else{
                i++;
            }
    }
    return res.join('');
};